Table-based load balancing for bonded network interfaces

ABSTRACT

Systems and methods for table-based load balancing implemented by bonded network interfaces. An example method may comprise: receiving, by a bonded interface of a computer system, a data link layer frame; identifying a network interface controller (NIC) of the bonded interface associated, by a load balancing table, with a source Media Access Control (MAC) address of the data link layer frame, wherein the load balancing table comprises a plurality of load balancing entries, each load balancing entry mapping a source MAC address to an identifier of a NIC comprised by the bonded interface; and transmitting the data link layer frame via the identified NIC.

TECHNICAL FIELD

The present disclosure is generally related to link aggregation, and ismore specifically related to systems and methods for providing loadbalancing for bonded interfaces.

BACKGROUND

Link aggregation refers to various methods of combining multiple networkconnections in order to increase the overall throughput which might notbe achieved by a single connection. Network interface controller (NIC)bonding refers to a method of aggregating multiple NICs into a singlelogical interface.

BRIEF DESCRIPTION OF THE DRAWINGS

The present disclosure is illustrated by way of examples, and not by wayof limitation, and may be more fully understood with references to thefollowing detailed description when considered in connection with thefigures, in which:

FIG. 1 depicts a high-level component diagram of an example computersystem operating in accordance with one or more aspects of the presentdisclosure;

FIG. 2 schematically illustrates an example networking configurationimplemented by a host computer system, in accordance with one or moreaspects of the present disclosure;

FIG. 3 schematically illustrates an example structure of a loadbalancing table that may be employed by a bonded network interface, inaccordance with one or more aspects of the present disclosure;

FIG. 4 depicts a flow diagram of an example method 400 for table-basedload balancing implemented by bonded network interfaces, in accordancewith one or more aspects of the present disclosure; and

FIG. 5 depicts a block diagram of an illustrative computer systemoperating in accordance with examples of the invention.

DETAILED DESCRIPTION

Described herein are methods and systems for table-based load balancingimplemented by bonded network interfaces.

In the below description and examples, references are made to OpenSystems Interconnection (OSI) model layers, including data link layer(layer 2) and network (layer 3), as defined by Recommendation X.200(07/94) by International Telecommunications Union (ITU). A “frame”herein shall refer to a unit of transmission in a data link layerprotocol, including a link-layer header followed by a data packet. Thedata link layer provides local delivery of frames between devices on thesame local area network (LAN). Functions of data link layer protocolsinclude local delivery, addressing, and media arbitration. Examples ofdata link protocols include Ethernet and Infiniband. The network layerprovides the functional and procedural means of transferringvariable-length data sequences from a source to a destination host viaone or more networks, while maintaining the quality of servicefunctions. Functions of network layer protocols include host addressingand message forwarding.

“Network interface controller” (NIC) herein refers to a computerhardware component that connects a computer to a computer network. A NICmay comprise electronic circuitry required to communicate with othernetworked devices using specific physical layer and data link layerstandards.

Network interface controller bonding herein refers to a method ofaggregating multiple NICs into a single logical interface that may beavailable to applications via a corresponding driver. Outgoing data linklayer frames may be transmitted to an external recipient (e.g., aswitch) via one of the NICs of the boded interface, referred to as“egress NIC.” The egress NIC may be selected by a method thatfacilitates load balancing among the NICs participating in the bondedinterface.

In certain implementations, the interface bonding technique may beemployed in a virtualized environment, wherein a hypervisor mayimplement a data link layer bridge to aggregate traffic to/from two ormore virtual NICs (vNICs) associated with one or more virtual machines.The bridged vNICs may communicate to two or more NICs of the hostcomputer via a bonded interface that employs the table-based loadbalancing technique, as described in more details herein below.

In accordance with one or more aspects of the present disclosure, theselection of a NIC for outgoing frame transmission may be performedbased on a load balancing table. Each table entry may map a source MediaAccess Control (MAC) address of an outgoing frame to an identifier of anegress NIC (i.e., the NIC that would transmit the outgoing frame to anexternal recipient).

Employing the load balancing table for identifying egress NICs foroutgoing data link layer frames allows on-the-fly reconfiguration of thebonded interface, wherein such reconfiguration may comprise creating,deleting, and/or modifying one or more load balancing table entries.Reconfiguring the bonded interface may be useful for rebalancing theload onto the NICs of a bonded interface responsive to determining thatthe load of two or more NICs is not balanced, as well as for excluding aNIC from the bonded interface responsive to detecting an unrecoverableerror condition associated with the NIC (e.g., a hardware fault).

Various aspects of the above referenced methods and systems aredescribed in details herein below by way of examples, rather than by wayof limitation.

FIG. 1 depicts a high-level component diagram of an examples computersystem operating in accordance with one or more aspects of the presentdisclosure. Example computer system 100 may comprise one or moreprocessors 120A-120B communicatively coupled to one or more memorydevices 130 and two or more NICs 140A-140B via a system bus 150.

“Processor” or “processing device” herein refers to a device capable ofexecuting instructions encoding arithmetic, logical, or I/O operations.In one illustrative example, a processor may follow Von Neumannarchitectural model and may comprise an arithmetic logic unit (ALU), acontrol unit, and a plurality of registers. In a further aspect, aprocessor may be a single core processor which is typically capable ofexecuting one instruction at a time (or process a single pipeline ofinstructions), or a multi-core processor which may simultaneouslyexecute multiple instructions. In another aspect, a processor may beimplemented as a single integrated circuit, two or more integratedcircuits, or may be a component of a multi-chip module (e.g., in whichindividual microprocessor dies are included in a single integratedcircuit package and hence share a single socket). A processor may alsobe referred to as a central processing unit (CPU). “Memory device”herein refers to a volatile or non-volatile memory device, such as RAM,ROM, EEPROM, or any other device capable of storing data. “I/O device”herein refers to a device capable of providing an interface between aprocessor and an external device capable of inputting and/or outputtingbinary data.

In various implementations, computer system 100 may further comprisevarious other devices, such as peripheral device controllers, which areomitted from FIG. 1 for clarity and conciseness.

Computer system 100 may be employed as a host system configured to runmultiple virtual machines 170, by executing a software layer 180, oftenreferred to as “hypervisor,” above the hardware and below the virtualmachines. In one illustrative example, hypervisor 180 may be a componentof an operating system 185 executed by host computer system 100.Alternatively, hypervisor 180 may be provided by an application runningunder host operating system 185, or may run directly on host computersystem 100 without an operating system beneath it. Hypervisor 180 mayabstract the physical layer, including processors, memory, and I/Odevices, and present this abstraction to virtual machines 170 as virtualdevices.

Virtual machine 170 may comprise one or more virtual processors 190.Processor virtualization may be implemented by hypervisor 180 schedulingtime slots on one or more physical processors 120 such that from theguest operating system's perspective those time slots are scheduled onvirtual processor 190. Virtual machine 170 may execute guest operatingsystem 196 which may utilize the underlying virtual devices, includingvirtual memory 192, virtual I/O devices 195, and vNICs 194. One or moreapplications 198 may be running on virtual machine 170 under guestoperating system 196.

In certain implementations, computer system 100 may include a bondingdriver 182 configured to aggregate two or more host NICs 140A-140Z intoa bonded interface 220 acting as a data link layer logical networkinterface that may be employed by various applications being executed bycomputer system 100. “Driver” herein refers to an executable code modulethat provides a software interface to one or more physical or logicaldevices, thus enabling the operating systems and application programs toaccess the underlying device functions. In an illustrative example,bonding driver 182 may be implemented by an executable code module(e.g., a kernel loadable module or a user space module) executed byoperating system 185.

FIG. 2 schematically illustrates an example networking configurationimplemented by host computer system 100, in accordance with one or moreaspects of the present disclosure. As schematically illustrated by FIG.2, each virtual machine 170 may comprise a vNIC 194. Host computersystem 100 may implement a data link layer bridge 210 to forward datalink layer frames between the bridged vNICs 194A-194N and bondedinterface 220 aggregating two or more NICs 140A-140Z into a single datalink layer logical interface. In certain implementations, bridge 210 maybe implemented by a bridge driver 184 (e.g., a code module beingexecuted within the context of hypervisor 180).

In an illustrative example, each of two or more host NICs 140A-140Z maybe connected to a corresponding switch port of the same data link layerswitch (not shown in FIG. 2), thus increasing the overall throughput ofbonded interface 220. In another illustrative example, two or more NICs140A-140Z may be connected to switch ports of two or more data linklayer switches, thus increasing both the overall throughput andreliability of bonded interface 220, as bonded interface 220 would stillbe fully functional even in the event of a failure of one or more datalink layer switches to which NICs 140A-140Z are connected.

Virtual machine 170 may transmit outgoing data link layer frames (e.g.,Ethernet frames) via a vNIC 194. Responsive to determining that a datalink layer frame transmitted by a virtual machine 170 is addressed toanother virtual machine connected to the same data link layer bridge210, bridge driver 184 may deliver the data link layer frame to thedestination vNIC. Otherwise, if the data link layer frame transmitted bya virtual machine 170 is addressed to a recipient residing outside ofhost computer system 100 bridge driver 184 may deliver the outgoing datalink layer frame to bonded interface 220.

Bonding driver 182 may perform selection of egress NICs for outgoingframe transmission by looking up the source MAC address of the outgoingframe in load balancing table 300, the structure of which is describedin more details herein below with reference to FIG. 3. Responsive toselecting an egress NIC, bonding driver 182 may transmit the outgoingframe via the selected NIC.

FIG. 3 schematically illustrates an example structure of a loadbalancing table that may be employed by a bonded network interface, inaccordance with one or more aspects of the present disclosure. Loadbalancing table 300 may comprise a plurality of load balancing entries310A-310Z. Each load balancing entry 310 may map a source MAC address312 to an identifier 314 of a NIC comprised by bonded interface 220.

Referring again to FIG. 2, bonded interface 220 may, in certainimplementations, be configured to substitute the source MAC address ofthe outgoing data link layer frame with a MAC address of the identifiedegress NIC before transmitting the outgoing data link layer frame. Inorder to facilitate the delivery of incoming data link layer framesaddressed to virtual machines 170, bonded interface 220 may beconfigured to respond to Address Resolution Protocol (ARP) requests withrespect to network layer addresses assigned to the vNICs 194A-194N. Suchan ARP response may comprise the MAC address of one of the NICs of thebonded interface. Incoming data link layer frames may thus be addressedto a NIC of the bonded interface and may then be routed by the bondedinterface based on the network layer addresses.

Alternatively, bonded interface 220 may be configured to transmit theoutgoing data link layer frame without substituting the source MACaddress. Host NICs 140 may be configured to receive, in the promiscuousmode, data link layer frames addressed to MAC addresses assigned to oneor more vNICs 194A-194N. The received incoming data link layer framesmay then be routed by the bonded interface to the destination vNIC 194based on the MAC addresses.

“Promiscuous mode” herein refers to a mode of NIC operation in which theNIC passes to its driver all received data link layer frames, ratherthan dropping the data link layer frames that are not addressed to theparticular NIC by a broadcast, multicast or unicast address.

In certain implementations, responsive to failing to locate a loadbalancing entry corresponding to the source MAC address of the outgoingdata link layer frame, bonding driver 182 may select an egress NIC 140of host computer system 100 to be associated with vNIC 194 that hasoriginated the outgoing frame.

In an illustrative example, bonding driver 182 may select the leastloaded NIC 140 of host computer system 100. In certain implementations,the least loaded NIC may be defined as the NIC that has transmittedand/or received the least, among all NICs of host computer system 100,number of data link layer frames within a certain period of time (e.g.,a rolling time window comprising a certain time period immediatelypreceding the current time).

In another illustrative example, bonding driver 182 may select a NIC byapplying a certain function to the MAC address of the outgoing data linklayer frame. In certain implementations, the identifier of a NIC to beassociated with vNIC 194 that has originated the outgoing frame may bedetermined as an identifier (e.g., the MAC address) of vNIC 194 that hasoriginated the outgoing frame taken by modulo of the number of NICsemployed by host computer system 100.

Responsive to selecting the NIC to be associated with vNIC 194 that hasoriginated the outgoing frame, bonding driver 182 may append, to loadbalancing table 300, a load balancing entry mapping the identifier ofthe selected NIC to the MAC address of the vNIC 194.

In operation, bonding driver 182 may force re-balancing of bondedinterface 220 by removing one or more load balancing entries from loadbalancing table 300. In an illustrative example, bonding driver 182 mayremove, from load balancing table 300, one or more load balancingentries periodically, e.g., based on a round-robin rule. In anotherillustrative example, bonding driver 182 may remove, from load balancingtable 300, one or more load balancing entries responsive to determiningthat the loads on two or more NICs of the bonded interface areunbalanced. In certain implementations, bonding driver 182 may remove aload balancing entry corresponding to the host NIC that is currentlyhandling the maximum load among all NICs of the host computer system.Alternatively, bonding driver 182 may remove load balancing entriescorresponding to the host NICs that are currently handling the minimumand the maximum loads among all NICs of the host computer system.

In certain implementations, bonding driver 182 may remove, from the loadbalancing table, one or more load balancing entries corresponding to aNIC of the bonded interface responsive to determining that the NIC isnot in an operational state (e.g., responsive to detecting a hardwarefailure of the NIC or receiving an unrecoverable error code from the NICdriver).

Removing one or more load balancing entries from load balancing table300 may initiate the above described procedure of selection of a newhost NIC to be associated with a vNIC the entry for which could not befound in load balancing table 300.

Initialization of load balancing table 300 may be performed by bondingdriver 182 upon the driver's initialization. In certain implementations,bonding driver 182 may create an empty table and, responsive to failingto locate a load balancing table entry for a particular vNIC, create anew table entry as described in more details herein above.Alternatively, bonding driver 182 may create a plurality of loadbalancing table as part of the driver initialization sequence, based oncertain driver initialization parameters describing the plurality ofvNICs to be served by the bonded interface. In an illustrative example,bonding driver 182 may determine the initial mappings for load balancingtable 300 using a round-robin rule, i.e., for each vNIC served by bondedinterface 200, bonding driver 182 may select the next unassigned hostNIC. In another illustrative example, for each vNIC served by bondedinterface 200, bonding driver 182 may select a host NIC randomly. In yetanother illustrative example, for each vNIC served by bonded interface200, bonding driver 182 may select a NIC by applying a certain functionto the MAC address of the vNIC (e.g., an identifier of the vNIC taken bymodulo of the number of NICs employed by host computer system 100).Responsive to associating a host NIC with the vNIC, bonding driver 182may create a new load balancing entry in load balancing table 300 toreflect the newly created association.

FIG. 4 depicts a flow diagram of an example method 400 for table-basedload balancing implemented by bonded network interfaces, in accordancewith one or more aspects of the present disclosure. Method 400 may beperformed by a computer system that may comprise hardware (e.g.,circuitry, dedicated logic, and/or programmable logic), software (e.g.,instructions executable on a computer system to perform hardwaresimulation), or a combination thereof. Method 400 and/or each of itsindividual functions, routines, subroutines, or operations may beperformed by one or more processors of the computer system executing themethod. In certain implementations, method 400 may be performed by asingle processing thread. Alternatively, method 400 may be performed bytwo or more processing threads, each thread executing one or moreindividual functions, routines, subroutines, or operations of themethod. In an illustrative example, the processing threads implementingmethod 400 may be synchronized (e.g., using semaphores, criticalsections, and/or other thread synchronization mechanisms).Alternatively, the processing threads implementing method 400 may beexecuted asynchronously with respect to each other.

At block 410, the bonding driver being executed by the example hostcomputer system may receive an outgoing data link layer frametransmitted by a virtual machine via a data link layer bridge, asdescribed in more details herein above.

At block 420, the bonding driver may look up the source MAC address ofthe outgoing data link layer frame in a load balancing table that mapsMAC addresses of two or more vNICs to identifiers of two or more NICs ofthe host computer system, as described in more details herein above.

Responsive to determining, at block 430, that a load balancing entrycorresponding to the source MAC address of the outgoing data link layerframe has been successfully identified, the processing may continue atblock 460; otherwise, the method may branch to block 440.

At block 440, responsive to failing to locate a load balancing entrycorresponding to the source MAC address of the outgoing data link layerframe, the bonding driver may select an egress NIC of the host computersystem to be associated with the vNIC that has originated the outgoingframe. In an illustrative example, bonding driver 182 may select theleast loaded NIC 140 of host computer system 100. In anotherillustrative example, bonding driver 182 may select a NIC by applying acertain function to the MAC address of the outgoing data link layerframe, as described in more details herein above.

At block 450, the bonding driver may append, to the load balancingtable, a load balancing entry mapping the identifier of the selected NICto the MAC address of the vNIC that has originated the outgoing datalink layer frame.

At block 460, the bonding driver may transmit the outgoing data linklayer frame via the identified egress NIC.

Responsive to determining, at block 470, that one or more load balancingentry removal conditions have been detected, the processing may continueat block 480; otherwise the method may loop back to block 410.

In an illustrative example, the load balancing entry removal conditionmay require removing, from the load balancing table, one or more loadbalancing entries periodically, e.g., based on a round-robin rule. Inanother illustrative example, the load balancing entry removal conditionmay require removing, from the load balancing table, one or more loadbalancing entries responsive to determining that the loads on two ormore NICs of the bonded interface are unbalanced. In yet anotherillustrative example, the load balancing entry removal condition mayrequire removing, from the load balancing table, one or more loadbalancing entries corresponding to a NIC of the bonded interfaceresponsive to determining that the NIC is not in an operational state(e.g., responsive to detecting a hardware failure of the NIC orreceiving an unrecoverable error code from the NIC driver), as describedin more details herein above.

At block 460, the bonding driver may remove one or more affected loadbalancing table entries. Responsive to completing operations describedwith reference to block 460, the method may loop back to block 410.

FIG. 5 depicts an example computer system 1000 which can perform any oneor more of the methods described herein. In an illustrative example,computer system 1000 may correspond to host computer system 100 of FIG.1.

In certain implementations, computer system 1000 may be connected (e.g.,via a network, such as a Local Area Network (LAN), an intranet, anextranet, or the Internet) to other computer systems. Computer system1000 may operate in the capacity of a server or a client computer in aclient-server environment, or as a peer computer in a peer-to-peer ordistributed network environment. Computer system 1000 may be provided bya personal computer (PC), a tablet PC, a set-top box (STB), a PersonalDigital Assistant (PDA), a cellular telephone, a web appliance, aserver, a network router, switch or bridge, or any device capable ofexecuting a set of instructions (sequential or otherwise) that specifyactions to be taken by that device. Further, the term “computer” shallinclude any collection of computers that individually or jointly executea set (or multiple sets) of instructions to perform any one or more ofthe methods described herein.

In a further aspect, the computer system 1000 may include a processor1002, a volatile memory 1004 (e.g., random access memory (RAM)), anon-volatile memory 1006 (e.g., read-only memory (ROM) orelectrically-erasable programmable ROM (EEPROM)), and a secondary memory1016 (e.g., a data storage device), which may communicate with eachother via a bus 1008.

Processor 1002 may be provided by one or more processing devices such asa general purpose processor (such as, for example, a complex instructionset computing (CISC) microprocessor, a reduced instruction set computing(RISC) microprocessor, a very long instruction word (VLIW)microprocessor, a microprocessor implementing other types of instructionsets, or a microprocessor implementing a combination of types ofinstruction sets) or a specialized processor (such as, for example, anapplication specific integrated circuit (ASIC), a field programmablegate array (FPGA), a digital signal processor (DSP), or a networkprocessor).

Computer system 1000 may further include a network interface controller1022. Computer system 1000 also may include a video display unit 1010(e.g., an LCD), an alphanumeric input device 1012 (e.g., a keyboard), apointing device 1014 (e.g., a mouse), and an audio output device 1020(e.g., a speaker).

Secondary memory 1016 may include a non-transitory computer-readablestorage medium 1024 on which may be stored instructions 1054 encodingany one or more of the methods or functions described herein, includinginstructions encoding bonding driver 182 of FIG. 1 implementing method400 for table-based load balancing implemented by bonded networkinterfaces.

Instructions 1054 may also reside, completely or partially, within mainmemory 1004 and/or within processor 1002 during execution thereof bycomputer system 1000, hence, main memory 1004 and processor 1002 mayalso constitute machine-readable storage media.

While computer-readable storage medium 1024 is shown in the illustrativeexamples as a single medium, the term “computer-readable storage medium”shall include a single medium or multiple media (e.g., a centralized ordistributed database, and/or associated caches and servers) that storethe one or more sets of executable instructions. The term“computer-readable storage medium” shall also include any tangiblemedium that is capable of storing or encoding a set of instructions forexecution by a computer that cause the computer to perform any one ormore of the methods described herein. The term “computer-readablestorage medium” shall include, but not be limited to, solid-statememories, optical media, and magnetic media.

The methods, components, and features described herein may beimplemented by discrete hardware components or may be integrated in thefunctionality of other hardware components such as ASICS, FPGAs, DSPs orsimilar devices. In addition, the methods, components, and features maybe implemented by firmware modules or functional circuitry withinhardware devices. Further, the methods, components, and features may beimplemented in any combination of hardware devices and softwarecomponents, or only in software.

Unless specifically stated otherwise, terms such as “updating”,“identifying”, “determining”, “sending”, “assigning”, or the like, referto actions and processes performed or implemented by computer systemsthat manipulates and transforms data represented as physical(electronic) quantities within the computer system registers andmemories into other data similarly represented as physical quantitieswithin the computer system memories or registers or other suchinformation storage, transmission or display devices. Also, the terms“first,” “second,” “third,” “fourth,” etc. as used herein are meant aslabels to distinguish among different elements and may not necessarilyhave an ordinal meaning according to their numerical designation.

Examples described herein also relate to an apparatus for performing themethods described herein. This apparatus may be specially constructedfor performing the methods described herein, or it may comprise ageneral purpose computer system selectively programmed by a computerprogram stored in the computer system. Such a computer program may bestored in a computer-readable tangible storage medium.

The methods and illustrative examples described herein are notinherently related to any particular computer or other apparatus.Various general purpose systems may be used in accordance with theteachings described herein, or it may prove convenient to construct morespecialized apparatus to perform method 400 and/or each of itsindividual functions, routines, subroutines, or operations. Examples ofthe structure for a variety of these systems are set forth in thedescription above.

The above description is intended to be illustrative, and notrestrictive. Although the present disclosure has been described withreferences to specific illustrative examples and implementations, itwill be recognized that the present disclosure is not limited to theexamples and implementations described. The scope of the disclosureshould be determined with reference to the following claims, along withthe full scope of equivalents to which the claims are entitled.

1. A method, comprising: receiving, by a bonded interface of a computersystem, a data link layer frame; identifying a network interfacecontroller (NIC) of the bonded interface associated, by a load balancingtable, with a source Media Access Control (MAC) address of the data linklayer frame, wherein the load balancing table comprises a plurality ofload balancing entries, each load balancing entry mapping a source MACaddress to an identifier of a NIC comprised by the bonded interface; andtransmitting the data link layer frame via the identified NIC.
 2. Themethod of claim 1, further comprising: providing the load balancingtable.
 3. The method of claim 1, further comprising: responsive tofailing to locate a load balancing entry corresponding to the source MACaddress of the data link layer frame, selecting a NIC of the bondedinterface to be associated with the source MAC address of the data linklayer frame.
 4. The method of claim 3, further comprising: appending, tothe load balancing table, a load balancing entry associating theselected NIC with the source MAC address of the data link layer frame.5. The method of claim 3, wherein selecting a NIC to be associated withthe source MAC address comprises identifying a least loaded NIC of thebonded interface.
 6. The method of claim 3, wherein selecting a NIC tobe associated with the source MAC address comprises determining anidentifier of the NIC based on the source MAC address.
 7. The method ofclaim 1, further comprising: periodically removing one or more loadbalancing entries from the load balancing table.
 8. The method of claim1, further comprising: removing one or more load balancing entries fromthe load balancing table responsive to determining that loads on two ormore NICs of the bonded interface are unbalanced.
 9. The method of claim1, further comprising: removing, from the load balancing table, one ormore load balancing entries corresponding to a NIC of the bondedinterface responsive to determining that the NIC is not in anoperational state.
 10. The method of claim 1, wherein transmitting thedata link layer frame further comprises: substituting a source MACaddress of the data link layer frame with a MAC address of theidentified NIC.
 11. The method of claim 1, wherein transmitting the datalink layer frame via the identified NIC is performed withoutsubstituting a source MAC address of the data link layer frame.
 12. Acomputer system comprising: a memory; and one or more processors,coupled to the memory, to: receive, by a bonded interface of a computersystem, a data link layer frame; identify a network interface controller(NIC) of the bonded interface associated, by a load balancing table,with a source Media Access Control (MAC) address of the data link layerframe, wherein the load balancing table comprises a plurality of loadbalancing entries, each load balancing entry mapping a source MACaddress to an identifier of a NIC comprised by the bonded interface; andtransmit the data link layer frame via the identified NIC.
 13. Thesystem of claim 12, wherein the processors are further to: responsive tofailing to locate a load balancing entry corresponding to the source MACaddress of the data link layer frame, select a NIC of the bondedinterface to be associated with the source MAC address of the data linklayer frame.
 14. The system of claim 13, wherein the processors arefurther to: append, to the load balancing table, a load balancing entryassociating the selected NIC with the source MAC address of the datalink layer frame.
 15. The system of claim 13, wherein selecting a NIC tobe associated with the source MAC address comprises identifying a leastloaded NIC of the bonded interface.
 16. The system of claim 13, whereinselecting a NIC to be associated with the source MAC address comprisesdetermining an identifier of the NIC based on the source MAC address.17. The system of claim 12, wherein the processors are further to:remove one or more load balancing entries from the load balancing table.18. A computer-readable non-transitory storage medium comprisingexecutable instructions that, when executed by a computer system, causethe computer system to perform operations comprising: receiving, by abonded interface of a computer system, a data link layer frame;identifying a network interface controller (NIC) of the bonded interfaceassociated, by a load balancing table, with a source Media AccessControl (MAC) address of the data link layer frame, wherein the loadbalancing table comprises a plurality of load balancing entries, eachload balancing entry mapping a source MAC address to an identifier of aNIC comprised by the bonded interface; and transmitting the data linklayer frame via the identified NIC.
 19. The computer-readablenon-transitory storage medium of claim 18, further comprising executableinstructions causing the computer system to perform operationscomprising: responsive to failing to locate a load balancing entrycorresponding to the source MAC address of the data link layer frame,selecting a NIC of the bonded interface to be associated with the sourceMAC address of the data link layer frame.
 20. The computer-readablenon-transitory storage medium of claim 18, further comprising executableinstructions causing the computer system to perform operationscomprising: appending, to the load balancing table, a load balancingentry associating the selected NIC with the source MAC address of thedata link layer frame.